//////////////////////////////////////////////////////////////////////
// Frustum.h
//
// WANG Yangzihao
// slashspirit@gmail.com
//
// Copyright (C) WANG Yangzihao, 2011, All rights reserved.
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
//  Brief Description
//
//	Frustum class used to clip scene
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include <BoundingBox.h>
#include <LA/Plane.h>
#include <boost/array.hpp>

namespace grflib
{
    namespace engine
    {
        namespace core
        {
            class CFrustum
            {
            public:
                enum VIS { VIS_YES, VIS_NO, VIS_PART };

            public:
                void ClipMatrix(D3DXMATRIX const & clip);
                CFrustum::VIS Visible(engine::core::BBox<float> const & box) const;

            private:
                typedef boost::array<grflib::LA::TPlane<float>, 6> planes_t;
                planes_t m_planes;

                // Look-Up Table
                typedef boost::array<int, 6> vertex_lut_t;
                vertex_lut_t m_vertex_lut;
            };
        }
    }
}